package dominioABC;

import java.util.ArrayList;
import java.util.List;

import dominioTanque.Bomba;

import api.*;
public class ObjetoGenerador extends ObjetoDominio implements Mensajes{
	private String idGenerador;
	private Suceso sucA;
	private Suceso sucB;
	private Suceso sucC; 
	private Suceso sucD;
	private Suceso sucE;
	private Suceso sucF; 
	private Suceso sucG;
	private Suceso sucH;
	private Suceso sucI;
	private Suceso sucJ;
	int respuestasInterpretadas;
	
	

	public ObjetoGenerador(GeneradorDeSucesos elementoDominio,String id) {
		super(elementoDominio);
		this.idGenerador = id;
		
		sucA = new Suceso("A");
		sucB = new Suceso("B");	
		sucD = new Suceso("D");
		sucE = new Suceso("E");
		List<Suceso> sucesosQueCancelaF = new ArrayList<Suceso>();
		sucesosQueCancelaF.add(sucA);
		sucF = new Suceso("F",sucesosQueCancelaF);
		
		List<Suceso> sucesosQueCancelaC = new ArrayList<Suceso>();
		sucesosQueCancelaC.add(sucE);		
		sucC = new Suceso("C",sucesosQueCancelaC);
		
		sucG = new Suceso("G");
		sucH = new Suceso("H");
		sucI = new Suceso("I");
		
		List<Suceso> sucesosQueCancelaJ = new ArrayList<Suceso>();
		sucesosQueCancelaJ.add(sucC);
		sucJ = new Suceso("J",sucesosQueCancelaJ);
		
		this.crearSucesosYRespuestas();
		
		this.respuestasInterpretadas = 0;
	}
	
	
	private void crearSucesosYRespuestas(){		
		//ABC se genera sin orden, no cosecutivo y con canelados
		List<Suceso> sucsNecesarios1 = new ArrayList<Suceso>();
		sucsNecesarios1.add(sucA);
		sucsNecesarios1.add(sucB);
		sucsNecesarios1.add(sucC);
		Respuesta resp1 = new Respuesta("resp1",sucsNecesarios1,false,false,false);
		this.agregarRespuesta(resp1);
		//EF se genera en sin orden, consecutivo y con cancelados
		List<Suceso> sucsNecesarios2 = new ArrayList<Suceso>();
		sucsNecesarios2.add(sucE);
		sucsNecesarios2.add(sucF);
		Respuesta resp2 = new Respuesta("resp2",sucsNecesarios2,false,true,false);
		this.agregarRespuesta(resp2);
		//AFD se genera en con orden, consecutivo y con cancelados
		List<Suceso> sucsNecesarios3 = new ArrayList<Suceso>();
		sucsNecesarios3.add(sucA);
		sucsNecesarios3.add(sucF);
		sucsNecesarios3.add(sucD);
		Respuesta resp3 = new Respuesta("resp3",sucsNecesarios3,true,true,false);
		this.agregarRespuesta(resp3);
		//GFB se genera en con orden, no consecutivo y sin cancelados
		List<Suceso> sucsNecesarios4 = new ArrayList<Suceso>();
		sucsNecesarios4.add(sucG);
		sucsNecesarios4.add(sucF);
		sucsNecesarios4.add(sucB);
		Respuesta resp4 = new Respuesta("resp4",sucsNecesarios4,true,false,false);
		this.agregarRespuesta(resp4);
		//AFD se genera en con orden, no consecutivo y sin cancelados
		List<Suceso> sucsNecesarios5 = new ArrayList<Suceso>();
		sucsNecesarios5.add(sucB);
		sucsNecesarios5.add(sucF);
		sucsNecesarios5.add(sucD);
		Respuesta resp5 = new Respuesta("resp5",sucsNecesarios5,true,false,false);
		this.agregarRespuesta(resp5);
		//CDF se genera en con orden, consecutivo y con cancelados
		List<Suceso> sucsNecesarios6 = new ArrayList<Suceso>();
		sucsNecesarios6.add(sucC);		
		sucsNecesarios6.add(sucD);
		sucsNecesarios6.add(sucF);
		Respuesta resp6 = new Respuesta("resp6",sucsNecesarios6,true,true,true);
		this.agregarRespuesta(resp6);
		//EDF se genera en con orden, consecutivo y sin cancelados
		List<Suceso> sucsNecesarios7 = new ArrayList<Suceso>();
		sucsNecesarios7.add(sucE);
		sucsNecesarios7.add(sucD);
		sucsNecesarios7.add(sucF);
		Respuesta resp7 = new Respuesta("resp7",sucsNecesarios7,false,true,true);
		this.agregarRespuesta(resp7);
		//EDF se genera en con orden, consecutivo y sin cancelados
		List<Suceso> sucsNecesarios8 = new ArrayList<Suceso>();
		sucsNecesarios8.add(sucA);
		sucsNecesarios8.add(sucD);
		sucsNecesarios8.add(sucI);
		Respuesta resp8 = new Respuesta("resp8",sucsNecesarios8,false,false,false);
		this.agregarRespuesta(resp8);

		
	}
	
	public void interpretarRespuesta(Respuesta respuesta) {		
		System.out.println(this.idGenerador+" - Llega respuesta: "+respuesta.getDescripcion());
		this.respuestasInterpretadas++;
	}
	
	public void notificarMensaje(String mensaje) {			
		if (mensaje.compareTo("A")==0) enviarSuceso(this.sucA);
		if (mensaje.compareTo("B")==0) enviarSuceso(this.sucB);
		if (mensaje.compareTo("C")==0) enviarSuceso(this.sucC);
		if (mensaje.compareTo("D")==0) enviarSuceso(this.sucD);
		if (mensaje.compareTo("E")==0) enviarSuceso(this.sucE);
		if (mensaje.compareTo("F")==0) enviarSuceso(this.sucF);
		if (mensaje.compareTo("G")==0) enviarSuceso(this.sucG);
		if (mensaje.compareTo("H")==0) enviarSuceso(this.sucH);
		if (mensaje.compareTo("I")==0) enviarSuceso(this.sucI);
	}
	
	public int getRespuestasInterpretadas() {
		return this.respuestasInterpretadas;
	}

	public void setRespuestasInterpretadas(int respuestasInterpretadas) {
		this.respuestasInterpretadas = respuestasInterpretadas;
	}
}
